package com.hddznet.uniplatform.sm.service.impl;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hddznet.uniplatform.sm.entity.SysDictEntity;
import com.hddznet.uniplatform.sm.entity.SysDictItemEntity;
import com.hddznet.uniplatform.sm.mapper.SysDictItemMapper;
import com.hddznet.uniplatform.sm.mapper.SysDictMapper;
import com.hddznet.uniplatform.sm.service.ISysDictService;

@Service
public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDictEntity> implements ISysDictService {

	@Autowired
	private SysDictMapper sysDictMapper;
	@Autowired
	private SysDictItemMapper sysDictItemMapper;
	
	/**默认的数据字典数据类型string*/
	private final static int dictTypeDefault = 1;
	
	@Override
	@Transactional
	public void saveMain(SysDictEntity sysDictEntity, List<SysDictItemEntity> sysDictItemEntityList) {
		Date now = new Date();
		sysDictEntity.setId(null);
		sysDictEntity.setDictType(dictTypeDefault);
		sysDictEntity.setCreateTime(now);
		sysDictEntity.setDefaultStatus();
		sysDictMapper.insert(sysDictEntity);
		for (SysDictItemEntity entity : sysDictItemEntityList) {
			entity.setId(null);
			entity.setDefaultStatus();
			entity.setCreateTime(now);
			//外键设置
			entity.setDictId(sysDictEntity.getId());
			sysDictItemMapper.insert(entity);
		}
	}

	@Override
	@Transactional
	public void updateMain(SysDictEntity sysDictEntity,List<SysDictItemEntity> sysDictItemEntityList) {
		sysDictMapper.updateById(sysDictEntity);
		
		//1.先删除子表数据
		sysDictItemMapper.deleteByMainId(sysDictEntity.getId());
		
		//2.子表数据重新插入
		for(SysDictItemEntity entity:sysDictItemEntityList) {
			//外键设置
			entity.setDictId(sysDictEntity.getId());
			sysDictItemMapper.insert(entity);
		}
	}

	@Override
	@Transactional
	public void delMain(String id) {
		sysDictItemMapper.deleteByMainId(id);
		sysDictMapper.deleteById(id);
	}

	@Override
	@Transactional
	public void delBatchMain(Collection<? extends Serializable> idList) {
		for(Serializable id:idList) {
			sysDictItemMapper.deleteByMainId(id.toString());
			sysDictMapper.deleteById(id);
		}
	}
	
}
